﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Data.Linq;
using System.Linq;
using System.Web;
using System.Web.UI;
using Entidades.Sistema.Venta;
using Mapping.Sistema.Venta;
using System.Globalization;
using System.Threading;

namespace VistaOnlineR1._1.Models.Sistema.Venta
{
    public static class CatalogoProducto
    {

        #region Consultas
        public static IEnumerable GetProductos()
        {
            return from producto in MappingProductos.ConsultarProductos() select producto;
        }
        public static IEnumerable GetProductos(int tipoproducto)
        {
            return from productos in MappingProductos.ConsultarProductos()
                   join tipoproductos in CatalogoTipoProducto.GetTipoProductosList() on productos.TipoProducto.IdTipoProducto equals tipoproductos.IdTipoProducto
                   where tipoproductos.IdTipoProducto == tipoproducto
                   select productos;
        }
        public static IList<Producto> GetProductosEditable()
        {
            IList<Producto> products = (IList<Producto>)HttpContext.Current.Session["Productos"];

            if (products == null)
            {
                products = (from product in MappingProductos.ConsultarProductos()
                            select new Producto
                            {
                                IdProducto = product.IdProducto,
                                Nombre = product.Nombre,
                                TipoProducto = product.TipoProducto,
                                CantidadPorUnidadProd = product.CantidadPorUnidadProd,
                                PrecioLista = product.PrecioLista,
                                DiasVencimiento = product.DiasVencimiento,
                                Descripcion = product.Descripcion,
                                Unidad = product.Unidad
                            }).ToList();
                HttpContext.Current.Session["Productos"] = products;
            }
            return products;
        }
        public static Producto GetProductoEditable(int IdProducto)
        {
            return (from product in GetProductosEditable() where product.IdProducto == IdProducto select product).FirstOrDefault();
        }        
        public static int GetNewEditableProductID()
        {
            IEnumerable<Producto> editableProducts = GetProductosEditable();
            return (editableProducts.Count() > 0) ? editableProducts.Last().IdProducto + 1 : 0;
        }
        #endregion

        #region Actuaciones
        public static void DeleteProduct(int IdProducto)
        {
            Producto product = GetProductoEditable(IdProducto);
            if (product != null)
            {
                GetProductosEditable().Remove(product);
                //MappingProductos
            }
        }
        public static void InsertProduct(Producto producto)
        {
            Producto editProducto = new Producto();
            editProducto.IdProducto = GetNewEditableProductID();
            editProducto.Nombre = producto.Nombre;
            editProducto.Estado = "Activo";
            editProducto.TipoProducto = producto.TipoProducto;
            editProducto.CantidadPorUnidadProd = producto.CantidadPorUnidadProd;
            editProducto.PrecioLista = producto.PrecioLista;
            editProducto.DiasVencimiento = producto.DiasVencimiento;
            editProducto.Descripcion = producto.Descripcion;
            editProducto.Unidad = producto.Unidad;
            GetProductosEditable().Add(editProducto);
            MappingProductos.AgregarProducto(editProducto);
        }
        public static void UpdateProduct(Producto producto)
        {
            Producto editProducto = GetProductoEditable(producto.IdProducto);
            if (editProducto != null)
            {
                editProducto.Nombre = producto.Nombre;
                editProducto.TipoProducto = producto.TipoProducto;
                editProducto.CantidadPorUnidadProd = producto.CantidadPorUnidadProd;
                editProducto.PrecioLista = producto.PrecioLista;
                editProducto.DiasVencimiento = producto.DiasVencimiento;
                editProducto.Descripcion = producto.Descripcion;
                //MappingProductos.EditarProducto
            }
        }
        #endregion      
        

        //public static void ApplyCurrentCulture()
        //{
        //    if (HttpContext.Current.Session["CurrentCulture"] != null)
        //    {
        //        CultureInfo ci = (CultureInfo)HttpContext.Current.Session["CurrentCulture"];
        //        Thread.CurrentThread.CurrentUICulture = ci;
        //        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
        //    }
        //}
    }
}